Skip to content

Retrodeck support - #236

Open
pawndev wants to merge 19 commits into
rommapp:mainfrom
pawndev:retrodeck
Open

Retrodeck support#236
pawndev wants to merge 19 commits into
rommapp:mainfrom
pawndev:retrodeck

Conversation

@pawndev

@pawndev pawndev commented May 30, 2026

Copy link
Copy Markdown
Collaborator

This is the continuation of #213

Next things to think of:

  • If grout is a component of retrodeck, needless to create a gamelist.xml in port for that ?
    • Surely we can omit this part
  • games downloaded and media in gamelist.xml in the roms folder doesn't seems to be read by retrodeck
    • because they does not go in the roms folder, but in the $XDG_CONFIG_HOME/ES-DE/gamelists/{core}/ folder
    • make sur to not override something else (e.g. alternateEmulatore)
    • same for images/videos/etc, paths: $XDG_CONFIG_HOME/ES-DE/downloaded_media/{core}/{3dboxes, backcovers, covers, fanart, manuals, marquees, miximages, physicalmedia, screenshots, titlescreens, videos}
    • can we put absolute path in the gamelist.xml ?
    • the medias does not seems to appear in the gamelist.xml when scrapped from scrapper, not mandatory ? (only fields: path, name, desc, rating, releasedate, developer, publisher, genre players)
  • how to retrieved the path where the roms/saves/bios folders are ?
    • In the $XDG_CONFIG_HOME/retrodeck/retrodeck.json there are many paths defined

Next things to do:

  • get paths from retrodeck.json
  • remove grout gamelist from port
  • Change grout log path
  • change gamelist path to $XDG_CONFIG_HOME/ES-DE/gamelists/{core}/
  • change medias downloaded (in the actual version, we can't download all, we need to choose which art to get)
  • do not fill all gamelist field like other ES cfw integration (cfw options on which field to allow, and not filled will be all ?)
  • Once AmberElec PR feat(CFW): added AmberELEC support with RG351V and Rg351P devices #234 is merged, get the relative path function for gamelist

Initial description:

Adds initial support for RetroDECK, so it can be added as a non-Steam game.
Feel free to request any change, especially if I forgot something.

This is a follow-up of this issue: #210.

EDIT: Added associated documentation.

EDIT2: Got inspired and added an automatic install script with media, so it looks nice in the Steam game library.

It currently looks fine on Bazzite, but I have an issue with nonsteam not detecting the Steam install on SteamOS. I'll investigate when I have a bit more free time.

@pawndev pawndev self-assigned this Jun 3, 2026
@XargonWan

Copy link
Copy Markdown

Note: in RetroDECK users can move the folders, so better to read their location from the retrodeck config (json format).

@pawndev

pawndev commented Jun 6, 2026

Copy link
Copy Markdown
Collaborator Author

Note: in RetroDECK users can move the folders, so better to read their location from the retrodeck config (json format).

Yep I already did the parsing of the config json in my local changes

@BrandonKowalski BrandonKowalski added this to the v5.0.0.0? milestone Jun 6, 2026
Parse the retrodeck.json file to handle properly all of the paths (bios, roms, etc.)
Handle gamelist that are not in the roms directories
sdhibit pushed a commit to sdhibit/grout that referenced this pull request Jul 26, 2026
Add a new ESDE CFW target covering EmulationStation Desktop Edition
setups on desktop Linux (Steam Deck, SteamOS, Bazzite): standalone
ES-DE, EmuDeck, and RetroDECK — one binary, with the flavor selected
via a first-run variant wizard and switchable in a new ES-DE Settings
screen.

Directories resolve through a precedence chain: explicit config
override > environment variable > variant discovery > variant default.
Discovery reads EmuDeck's settings.sh (emulationPath), RetroDECK's
retrodeck.json (as requested by the RetroDECK maintainer in rommapp#236), and
ES-DE's es_settings.xml, so relocated/SD-card installs work without
manual configuration. Every directory (base, ROMs, BIOS, saves, ES-DE
data, media) can also be overridden individually in settings.

ES-DE layout differences from Batocera-style ES are handled:
- gamelists are written to <appdata>/gamelists/<system>/gamelist.xml
  with ./-relative game paths (new gamelist.Options hook)
- media is written to <media>/<system>/{covers,marquees,backcovers,
  fanart,screenshots,videos,manuals} matched by ROM basename; a new
  UsesArtSuffixes() predicate disables the -thumb/-marquee/-boxback/
  -fanart filename suffixes for ES-DE
- no ES restart scheduling (grout runs as ES-DE's child); the bezel
  art option is hidden (no such media type in ES-DE)

Grout installs as an ES-DE port in <roms>/ports/. The launcher exports
GROUT_ESDE_ROMS_DIR from its own location so the ROMs dir is correct
for any variant, and carries the Steam Deck input workarounds from
PR rommapp#235 (ignore axis-motion event flooding, suppress Steam keyboard).
The amd64 build now bundles the full SDL library stack for SteamOS's
sealed OS and RetroDECK's flatpak sandbox.

Includes platform table (docs/platforms/ESDE.md) generated into
cfw/esde/data/platforms.json, packaging target (Grout-ESDE.zip), CI
release wiring, in-app updater support, install/settings docs, and
unit tests for path precedence and the three config parsers.

Closes rommapp#210, closes rommapp#238. Builds on rommapp#235, rommapp#236, and rommapp#213.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants